package com.zx.lc.service;

import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.TokenStream;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.V;
import dev.langchain4j.service.spring.AiService;
import dev.langchain4j.service.spring.AiServiceWiringMode;
import reactor.core.publisher.Flux;

// AiService 声明AI服务，可以指定模型
@AiService(wiringMode = AiServiceWiringMode.EXPLICIT,
        chatMemory = "myChatMemory",// 指定使用chatMemory记录上下文会话，区分多用户，需要自定义chatMemoryProvider
        chatModel = "ollamaChatModel",
        streamingChatModel = "ollamaStreamingChatModel")
public interface OllamaAssistant {

    // 系统提示词：用于定义AI的角色
    @SystemMessage("你是我的私人管家")
    //使用客户消息模板，{{msg}}用于绑定变量，变量来自方法中的参数，使用@V声明
    @UserMessage("我兴奋的跟你说：{{msg}}")
    String chat(@V("msg") String userMessage);

    /**
     * 使用流式消息
     * @param userMessage
     * @return
     */
    // 系统提示词：用于定义AI的角色
    @SystemMessage("你是我的私人管家")
    //使用客户消息模板，{{msg}}用于绑定变量，变量来自方法中的参数，使用@V声明
    @UserMessage("我兴奋的跟你说：{{msg}}")
    TokenStream stream(@V("msg") String userMessage);

    /**
     * 使用流式消息
     * @param userMessage
     * @return
     */
    // 系统提示词：用于定义AI的角色
    @SystemMessage("你是我的私人管家")
    //使用客户消息模板，{{msg}}用于绑定变量，变量来自方法中的参数，使用@V声明
    @UserMessage("我兴奋的跟你说：{{msg}}")
    Flux<String> stream3(@V("msg") String userMessage);
}
